package com.kakame.codenews.base.web.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.kakame.codenews.base.web.enumeration.CacheOperateType;

/**
 * 缓存操作
 * @author 何家明 2018年7月22日 上午12:38:01
 */
@Documented                            // 指明该注解可以用于生成doc 
@Inherited                             // 该注解可以被自动继承 
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.METHOD)            // 注解只能作用于方法上 
public @interface CacheOperate {
    
	/**
	 * 缓存名字，如果不填，默认取类名加方法名，建议最好不要填写名字
	 * @author 何家明 2018年7月22日 上午12:40:28
	 * @return
	 */
    public String cacheName() default "";
    
    /**
     * <pre>
     * <b>desc:</b> 需要进行删除的缓存名
     * <b>auth:</b> ex-hejm
     * <b>date:</b> 2018年8月2日 上午9:51:05
     * </pre>
     * @return
     */
    public String[] deleteCaches() default {};
    
    /**
     * <pre>
     * <b>desc:</b> 是否需要根据键名前缀进行删除缓存集合 
     * <b>auth:</b> ex-hejm
     * <b>date:</b> 2018年8月2日 上午9:54:47
     * </pre>
     * @return
     */
    public boolean deleteWithPre() default false;
    
    /**
     * 操作类型
     * @author 何家明 2018年7月22日 下午6:24:54
     * @return
     */
    public CacheOperateType operateType();
    
    /**
     * <pre>
     * <b>desc:</b> 方法的返回类型 
     * <b>auth:</b> ex-hejm
     * <b>date:</b> 2018年7月30日 下午2:51:09
     * </pre>
     * @return
     */
    public Class<?> returnType() default Object.class;
}
